package juc.exchanger;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Exchanger;

/**
 * Exchanger：交换两个线程的数据，通常用于管道设计。
 * 具体来说，Exchanger类允许在两个线程之间定义同步点。当两个线程都到达同步点时，他们交换数据结构，因此第一个线程的数据结构进入到第二个线程中，第二个线程的数据结构进入到第一个线程中。
 * 
 * 生产者线程和消费者线程都会先各自创建1个需要交换数据的缓冲列表，然后通过exchanger来同步交换数据。
 * 生产者则通过for循环向缓存队列存储数据并使用exchanger对象消费者同步，而消费中通过调用Exchanger与生产者进行同步来获取数据。
 * 
 * @author guweiqiang
 * 2018年7月17日
 */
public class Test {

	public static void main(String[] args) {
		// 定义两个需要交换的List<String>
		List<String> producerData = new ArrayList<>();
		List<String> consumerData = new ArrayList<>();
		
		// 创建1个Exchanger
		Exchanger<List<String>> exchanger = new Exchanger<>();
		
		// 创建生产者和消费者的线程对象并启动
		new Thread(new Producer(producerData, exchanger)).start();
		new Thread(new Consumer(consumerData, exchanger)).start();
	}

}
